package com.algorithmicTest1;

import java.util.ArrayList;
import java.util.List;

public class BlockSearch {
    public static void main(String[] args) {



        //1创建集合
        ArrayList<Block> List = new ArrayList<Block>();

        //2创建Block的对象：
        Block b1 = new Block(10,0,1);
        Block b2 = new Block(20,2,5);
        Block b3 = new Block(40,6,10);
        Block b4 = new Block(50,11,13);

        //添加到集合中
        List.add(b1);
        List.add(b2);
        List.add(b3);
        List.add(b4);

        //创建数组
        int[]arr = {7,10,13,19,16,20,27,22,30,40,36,43,50,48};
        int search = 30;
        int Index = extracted(List, arr, search);
        if (search == arr[Index]){
            System.out.println("成功找到索引"+ Index);
        }else
            System.out.println("未找到");


    }

    private static int extracted(ArrayList<Block> List,int[]arr , int search) {
        int Index = find(List,search);
        if (Index == -1){
            return -1;
        }
        for (int i = List.get(Index).getStartIndex(); i <= List.get(Index).getEndIndex(); i++) {
            if(search == arr[i]){
                return i;
            }
        }
        return -1;
    }

    //定义一个方法：从集合中找到块中的索引
    public static int find (ArrayList<Block> List , int search ) {

        for (int i = 0; i < List.size(); i++) {
            if(List.get(i).getMax()>=search){
               return i ;
            }
        }
        return -1;
    }
    //还有一代码是扩展的分块查找
//    public class Block {
//        //定义每一个块的属性：
//        private int max;
//        private int startIndex;
//        private int endIndex;
    //在这里我们在添加一个属性：
    //private int min;
    //目的是找一个最大范围和最小范围，思路和刚刚一致，
    //所分的块中不能有交集








}
